home *** CD-ROM | disk | FTP | other *** search
-
-
-
- SIN Mathematical Library Procedures SIN
-
-
-
- NNAAMMEE
- sin, cos, tan, asin, acos, atan, atan2 - trigonometric func-
- tions and their inverses
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<mmaatthh..hh>>
-
- ddoouubbllee ssiinn((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee ccooss((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee ttaann((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee aassiinn((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee aaccooss((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee aattaann((xx))
- ddoouubbllee xx;;
-
- ddoouubbllee aattaann22((yy,,xx))
- ddoouubbllee yy,,xx;;
-
- DDEESSCCRRIIPPTTIIOONN
- Sin, cos and tan return trigonometric functions of radian
- arguments x.
-
- Asin returns the arc sine in the range -pi/2 to pi/2.
-
- Acos returns the arc cosine in the range 0 to pi.
-
- Atan returns the arc tangent in the range -pi/2 to pi/2.
-
- On a VAX,
- atan2(y,x) := atan(y/x) if x > 0,
- sign(y)*(pi - atan(|y/x|)) if x < 0,
- 0 if x = y = 0, or
- sign(y)*pi/2 if x = 0 != y.
-
- DDIIAAGGNNOOSSTTIICCSS
- On a VAX, if |x| > 1 then asin(x) and acos(x) will return
- reserved operands and _e_r_r_n_o will be set to EDOM.
-
- NNOOTTEESS
- Atan2 defines atan2(0,0) = 0 on a VAX despite that previ-
- ously atan2(0,0) may have generated an error message. The
- reasons for assigning a value to atan2(0,0) are these:
-
-
-
- Sprite v1.0 May 12, 1986 1
-
-
-
-
-
-
- SIN Mathematical Library Procedures SIN
-
-
-
- (1) Programs that test arguments to avoid computing
- atan2(0,0) must be indifferent to its value. Programs
- that require it to be invalid are vulnerable to diverse
- reactions to that invalidity on diverse computer sys-
- tems.
-
- (2) Atan2 is used mostly to convert from rectangular (x,y)
- to polar (r,theta) coordinates that must satisfy x =
- r*cos theta and y = r*sin theta. These equations are
- satisfied when (x=0,y=0) is mapped to (r=0,theta=0) on a
- VAX. In general, conversions to polar coordinates
- should be computed thus:
- r := hypot(x,y); ... := sqrt(x*x+y*y)
- theta := atan2(y,x).
-
- (3) The foregoing formulas need not be altered to cope in a
- reasonable way with signed zeros and infinities on a
- machine that conforms to IEEE 754; the versions of hypot
- and atan2 provided for such a machine are designed to
- handle all cases. That is why atan2(+_0,-0) = +_pi, for
- instance. In general the formulas above are equivalent
- to these:
- r := sqrt(x*x+y*y); if r = 0 then x := copysign(1,x);
- if x > 0 then theta := 2*atan(y/(r+x))
- else theta := 2*atan((r-x)/y);
- except if r is infinite then atan2 will yield an appropriate
- multiple of pi/4 that would otherwise have to be obtained by
- taking limits.
-
- EERRRROORR ((dduuee ttoo RRoouunnddooffff eettcc..))
- Let P stand for the number stored in the computer in place
- of pi = 3.14159 26535 89793 23846 26433 ... . Let "trig"
- stand for one of "sin", "cos" or "tan". Then the expression
- "trig(x)" in a program actually produces an approximation to
- trig(x*pi/P), and "atrig(x)" approximates (P/pi)*atrig(x).
- The approximations are close, within 0.9 _u_l_ps for sin, cos
- and atan, within 2.2 _u_l_ps for tan, asin, acos and atan2 on a
- VAX. Moreover, P = pi in the codes that run on a VAX.
-
- In the codes that run on other machines, P differs from pi
- by a fraction of an _u_l_p; the difference matters only if the
- argument x is huge, and even then the difference is likely
- to be swamped by the uncertainty in x. Besides, every tri-
- gonometric identity that does not involve pi explicitly is
- satisfied equally well regardless of whether P = pi. For
- instance, sin(x)**2+cos(x)**2 = 1 and
- sin(2x) = 2sin(x)cos(x) to within a few _u_l_ps no matter how
- big x may be. Therefore the difference between P and pi is
- most unlikely to affect scientific and engineering computa-
- tions.
-
-
-
-
-
- Sprite v1.0 May 12, 1986 2
-
-
-
-
-
-
- SIN Mathematical Library Procedures SIN
-
-
-
- SSEEEE AALLSSOO
- math(3M), hypot(3M), sqrt(3M), infnan(3M)
-
- AAUUTTHHOORR
- Robert P. Corbett, W. Kahan, Stuart I. McDonald, Peter Tang
- and, for the codes for IEEE 754, Dr. Kwok-Choi Ng.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sprite v1.0 May 12, 1986 3
-
-
-
-